/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.upn.sigemfi.gar.beans;

import edu.upn.sigemfi.gar.bc.GarantiaDelegate;
import edu.upn.sigemfi.gar.be.Garantia;
import edu.upn.sigemfi.gar.be.GarantiaHipotecaria;
import edu.upn.sigemfi.gar.be.GarantiaPignoraticia;
import edu.upn.sigemfi.gar.be.GarantiaPrendaria;
import edu.upn.sigemfi.gar.be.GarantiaWarrant;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Freddy
 */
public class RetasarController extends AbstractController{

    private Garantia garantia;
    private GarantiaHipotecaria garantiaHipotecaria;
    private GarantiaPrendaria garantiaPrendaria;
    private GarantiaWarrant garantiaWarrant;
    private GarantiaPignoraticia garantiaPignoraticia;

    private GarantiaDelegate delegadoGarantia;

    private String tipoLista="Garantias Prendarias";
    private String modoTasacion;
    private String tipoCalc="";
    private String tipoMonedaNueva;

    private Double tipoCambio;
    private Double porcentaje;
    private Double valorAActualizar;

    public double Redondear(double nD, int nDec)
    {
    return Math.round(nD*Math.pow(10,nDec))/Math.pow(10,nDec);
    }

    public String retasar()
    {
        if (tipoLista.equals("Garantias Prendarias")){
            Double nuevoValor = (porcentaje/100)*Double.valueOf(garantiaPrendaria.getValortasacion().toString());
            if (modoTasacion.equals("Ampliacion"))
            {
                Double valorAActu = Double.valueOf(garantiaPrendaria.getValortasacion().toString())+nuevoValor;

                garantiaPrendaria.setValortasacion(BigDecimal.valueOf(valorAActu));
                try {
                    delegadoGarantia.editarGarantiaPrendaria(garantiaPrendaria);
                    info("Se realizo la retasacion");
                } catch (Exception ex) {
                    error(ex.getMessage());
                }
            }
            if (modoTasacion.equals("Disminucion"))
            {
                Double valorAActu = Double.valueOf(garantiaPrendaria.getValortasacion().toString())-nuevoValor;
                garantiaPrendaria.setValortasacion(BigDecimal.valueOf(valorAActu));
                try {
                    delegadoGarantia.editarGarantiaPrendaria(garantiaPrendaria);
                    info("Se realizo la retasacion");
                } catch (Exception ex) {
                    error(ex.getMessage());
                }
            }
        }
         if (tipoLista.equals("Garantias Hipotecarias")){
            Double nuevoValor = (porcentaje/100)*Double.valueOf(garantiaHipotecaria.getValortasacion().toString());
            if (modoTasacion.equals("Ampliacion"))
            {
                Double valorAActu = Double.valueOf(garantiaHipotecaria.getValortasacion().toString())+nuevoValor;

                garantiaHipotecaria.setValortasacion(BigDecimal.valueOf(valorAActu));
                try {
                    delegadoGarantia.editarGarantiaHipotecaria(garantiaHipotecaria);
                    info("Se realizo la retasacion");
                } catch (Exception ex) {
                    error(ex.getMessage());
                }
            }
            if (modoTasacion.equals("Disminucion"))
            {
                Double valorAActu = Double.valueOf(garantiaHipotecaria.getValortasacion().toString())-nuevoValor;
                garantiaHipotecaria.setValortasacion(BigDecimal.valueOf(valorAActu));
                try {
                    delegadoGarantia.editarGarantiaHipotecaria(garantiaHipotecaria);
                    info("Se realizo la retasacion");
                } catch (Exception ex) {
                    error(ex.getMessage());
                }
            }
         }
        if (tipoLista.equals("Garantias Warrant")){
            Double nuevoValor = (porcentaje/100)*Double.valueOf(garantiaWarrant.getValortasacion().toString());
            if (modoTasacion.equals("Ampliacion"))
            {
                Double valorAActu = Double.valueOf(garantiaWarrant.getValortasacion().toString())+nuevoValor;

                garantiaWarrant.setValortasacion(BigDecimal.valueOf(valorAActu));
                try {
                    delegadoGarantia.editarGarantiaWarrant(garantiaWarrant);
                    info("Se realizo la retasacion");
                } catch (Exception ex) {
                    error(ex.getMessage());
                }
            }
            if (modoTasacion.equals("Disminucion"))
            {
                Double valorAActu = Double.valueOf(garantiaWarrant.getValortasacion().toString())-nuevoValor;
                garantiaWarrant.setValortasacion(BigDecimal.valueOf(valorAActu));
                try {
                    delegadoGarantia.editarGarantiaWarrant(garantiaWarrant);
                    info("Se realizo la retasacion");
                } catch (Exception ex) {
                    error(ex.getMessage());
                }
            }
         }
        return "listar";
    }

    public String getTipoMonedaNueva() {
        return tipoMonedaNueva;
    }

    public void setTipoMonedaNueva(String tipoMonedaNueva) {
        this.tipoMonedaNueva = tipoMonedaNueva;
    }

    public String getTipoCalc() {
        return tipoCalc;
    }

    public void setTipoCalc(String tipoCalc) {
        this.tipoCalc = tipoCalc;       
    }

    public RetasarController() {
        setTipoCambio(2.92);
        delegadoGarantia = new GarantiaDelegate();
    }

    public Double getValorAActualizar() {
        return valorAActualizar;
    }

    public void setValorAActualizar(Double valorAActualizar) {
        this.valorAActualizar = valorAActualizar;
    }

    public Double getPorcentaje() {
        return porcentaje;
    }

    public void setPorcentaje(Double porcentaje) {
        this.porcentaje = porcentaje;
    }

    public String verificarCampos(){
        
        if(modoTasacion == null || modoTasacion.isEmpty() )
        {
            error("Elija Modo de Tasacion");
            return "";
        }
        if( tipoCalc == null ||tipoCalc.isEmpty())
        {
            error("Elija Tipo de Calculo");
            return "";
        }
        if( porcentaje == null ||porcentaje.toString().isEmpty())
        {
            error("Ingrese porcentaje de tasacion");
            return "";
        }
        if (tipoLista.equals("Garantias Prendarias")){
            if (garantiaPrendaria.getSaldodisponible() == null || garantiaPrendaria.getSaldodisponible().toString().isEmpty())
            {
                error("La garantia Prendaria no tiene Saldo Disponible");
                return "";
            }
            if (garantiaPrendaria.getValortasacion() == null || garantiaPrendaria.getValortasacion().toString().isEmpty())
            {
                error("La garantia Prendaria no dispone de Valor de Tasacion");
                return "";
            }
        }
        if (tipoLista.equals("Garantias Hipotecarias")){
            if (garantiaHipotecaria.getSaldodisponible() == null || garantiaHipotecaria.getSaldodisponible().toString().isEmpty())
            {
                error("La garantia Hipotecaria no tiene Saldo Disponible");
                return "";
            }
            if (garantiaHipotecaria.getValortasacion() == null || garantiaHipotecaria.getValortasacion().toString().isEmpty())
            {
                error("La garantia Prendaria no dispone de Valor de Tasacion");
                return "";
            }
        }
        if (tipoLista.equals("Garantias Warrant")){
            if (garantiaWarrant.getSaldodisponible() == null || garantiaWarrant.getSaldodisponible().toString().isEmpty())
            {
                error("La garantia Warrant no tiene Saldo Disponible");
                return "";
            }
            if (garantiaWarrant.getValortasacion() == null || garantiaWarrant.getValortasacion().toString().isEmpty())
            {
                error("La garantia Warrant no dispone de Valor de Tasacion");
                return "";
            }
        }
        calcular();
        return "continuar";
    }

    public void verificar(){
        if (tipoLista.equals("Garantias Prendarias")){
            if (tipoCalc.equals("Normal"))
            {
                this.tipoMonedaNueva = garantiaPrendaria.getTipomoneda();
            }
            if (tipoCalc.equals("Inverso"))
            {
                if (garantiaPrendaria.getTipomoneda().equals("Soles"))
                {
                    this.tipoMonedaNueva = "Dolares";
                }
                if (garantiaPrendaria.getTipomoneda().equals("Dolares"))
                {
                    this.tipoMonedaNueva = "Soles";
                }
            }
        }
         if (tipoLista.equals("Garantias Pignoraticias")){
            if (tipoCalc.equals("Normal"))
            {
                this.tipoMonedaNueva = garantiaPignoraticia.getTipomoneda();
            }
            if (tipoCalc.equals("Inverso"))
            {
                if (garantiaPignoraticia.getTipomoneda().equals("Soles"))
                {
                    this.tipoMonedaNueva = "Dolares";
                }
                if (garantiaPignoraticia.getTipomoneda().equals("Dolares"))
                {
                    this.tipoMonedaNueva = "Soles";
                }
            }
         }
        if (tipoLista.equals("Garantias Hipotecarias")){
            if (tipoCalc.equals("Normal"))
            {
                this.tipoMonedaNueva = garantiaHipotecaria.getTipomoneda();
            }
            if (tipoCalc.equals("Inverso"))
            {
                if (garantiaHipotecaria.getTipomoneda().equals("Soles"))
                {
                    this.tipoMonedaNueva = "Dolares";
                }
                if (garantiaHipotecaria.getTipomoneda().equals("Dolares"))
                {
                    this.tipoMonedaNueva = "Soles";
                }
            }
         }
        if (tipoLista.equals("Garantias Warrant")){
            if (tipoCalc.equals("Normal"))
            {
                this.tipoMonedaNueva = garantiaWarrant.getTipomoneda();
            }
            if (tipoCalc.equals("Inverso"))
            {
                if (garantiaWarrant.getTipomoneda().equals("Soles"))
                {
                    this.tipoMonedaNueva = "Dolares";
                }
                if (garantiaWarrant.getTipomoneda().equals("Dolares"))
                {
                    this.tipoMonedaNueva = "Soles";
                }
            }
         }
    }

    public void calcular(){
        verificar();
        
        if (tipoLista.equals("Garantias Prendarias")){
            Double nuevoValor = (porcentaje/100)*Double.valueOf(garantiaPrendaria.getValortasacion().toString());
            if (modoTasacion.equals("Ampliacion"))
            {
                valorAActualizar = Double.valueOf(garantiaPrendaria.getValortasacion().toString())+nuevoValor;
                if (garantiaPrendaria.getTipomoneda().equals("Soles"))
                {
                    if(this.tipoMonedaNueva.equals("Dolares"))
                    valorAActualizar = valorAActualizar / tipoCambio;
                }
                if (garantiaPrendaria.getTipomoneda().equals("Dolares"))
                {
                    if(this.tipoMonedaNueva.equals("Soles"))
                    valorAActualizar = valorAActualizar * tipoCambio;
                }
            }
            if (modoTasacion.equals("Disminucion"))
            {
                valorAActualizar = Double.valueOf(garantiaPrendaria.getValortasacion().toString())-nuevoValor;
                if (garantiaPrendaria.getTipomoneda().equals("Soles"))
                {
                    if(this.tipoMonedaNueva.equals("Dolares"))
                    valorAActualizar = valorAActualizar / tipoCambio;
                }
                if (garantiaPrendaria.getTipomoneda().equals("Dolares"))
                {
                    if(this.tipoMonedaNueva.equals("Soles"))
                    valorAActualizar = valorAActualizar * tipoCambio;
                }
            }
        }
        if (tipoLista.equals("Garantias Pignoraticias")){
            Double nuevoValor = (porcentaje/100)*Double.valueOf(garantiaPignoraticia.getImporte().toString());
            if (modoTasacion.equals("Ampliacion"))
            {
                valorAActualizar = Double.valueOf(garantiaPignoraticia.getImporte().toString())+nuevoValor;
                if (garantiaPignoraticia.getTipomoneda().equals("Soles"))
                {
                    if(this.tipoMonedaNueva.equals("Dolares"))
                    valorAActualizar = valorAActualizar / tipoCambio;
                }
                if (garantiaPignoraticia.getTipomoneda().equals("Dolares"))
                {
                    if(this.tipoMonedaNueva.equals("Soles"))
                    valorAActualizar = valorAActualizar * tipoCambio;
                }
            }
            if (modoTasacion.equals("Disminucion"))
            {
                valorAActualizar = Double.valueOf(garantiaPignoraticia.getImporte().toString())-nuevoValor;
                if (garantiaPignoraticia.getTipomoneda().equals("Soles"))
                {
                    if(this.tipoMonedaNueva.equals("Dolares"))
                    valorAActualizar = valorAActualizar / tipoCambio;
                }
                if (garantiaPignoraticia.getTipomoneda().equals("Dolares"))
                {
                    if(this.tipoMonedaNueva.equals("Soles"))
                    valorAActualizar = valorAActualizar * tipoCambio;
                }
            }
        }
        if (tipoLista.equals("Garantias Hipotecarias")){
            Double nuevoValor = (porcentaje/100)*Double.valueOf(garantiaHipotecaria.getValortasacion().toString());
            if (modoTasacion.equals("Ampliacion"))
            {
                valorAActualizar = Double.valueOf(garantiaHipotecaria.getValortasacion().toString())+nuevoValor;
                if (garantiaHipotecaria.getTipomoneda().equals("Soles"))
                {
                    if(this.tipoMonedaNueva.equals("Dolares"))
                    valorAActualizar = valorAActualizar / tipoCambio;
                }
                if (garantiaHipotecaria.getTipomoneda().equals("Dolares"))
                {
                    if(this.tipoMonedaNueva.equals("Soles"))
                    valorAActualizar = valorAActualizar * tipoCambio;
                }
            }
            if (modoTasacion.equals("Disminucion"))
            {
                valorAActualizar = Double.valueOf(garantiaHipotecaria.getValortasacion().toString())-nuevoValor;
                if (garantiaHipotecaria.getTipomoneda().equals("Soles"))
                {
                    if(this.tipoMonedaNueva.equals("Dolares"))
                    valorAActualizar = valorAActualizar / tipoCambio;
                }
                if (garantiaHipotecaria.getTipomoneda().equals("Dolares"))
                {
                    if(this.tipoMonedaNueva.equals("Soles"))
                    valorAActualizar = valorAActualizar * tipoCambio;
                }
            }
        }
        if (tipoLista.equals("Garantias Warrant")){
            Double nuevoValor = (porcentaje/100)*Double.valueOf(garantiaWarrant.getValortasacion().toString());
            if (modoTasacion.equals("Ampliacion"))
            {
                valorAActualizar = Double.valueOf(garantiaWarrant.getValortasacion().toString())+nuevoValor;
                if (garantiaWarrant.getTipomoneda().equals("Soles"))
                {
                    if(this.tipoMonedaNueva.equals("Dolares"))
                    valorAActualizar = valorAActualizar / tipoCambio;
                }
                if (garantiaWarrant.getTipomoneda().equals("Dolares"))
                {
                    if(this.tipoMonedaNueva.equals("Soles"))
                    valorAActualizar = valorAActualizar * tipoCambio;
                }
            }
            if (modoTasacion.equals("Disminucion"))
            {
                valorAActualizar = Double.valueOf(garantiaWarrant.getValortasacion().toString())-nuevoValor;
                if (garantiaWarrant.getTipomoneda().equals("Soles"))
                {
                    if(this.tipoMonedaNueva.equals("Dolares"))
                    valorAActualizar = valorAActualizar / tipoCambio;
                }
                if (garantiaWarrant.getTipomoneda().equals("Dolares"))
                {
                    if(this.tipoMonedaNueva.equals("Soles"))
                    valorAActualizar = valorAActualizar * tipoCambio;
                }
            }
        }
    }

    public Double getTipoCambio() {
        return tipoCambio;
    }

    public void setTipoCambio(Double tipoCambio) {
        this.tipoCambio = tipoCambio;
    }

    public String getModoTasacion() {
        return modoTasacion;
    }

    public void setModoTasacion(String modoTasacion) {
        this.modoTasacion = modoTasacion;
    }

    public boolean isverPrendarias(){
        if (tipoLista.equals("Garantias Prendarias"))
                return true;
        else
            return false;
    }

    public boolean isverHipotecarias(){
        if (tipoLista.equals("Garantias Hipotecarias"))
                return true;
        else
            return false;
    }

    public boolean isverPignoraticias(){
        if (tipoLista.equals("Garantias Pignoraticias"))
                return true;
        else
            return false;
    }

    public boolean isverWarrant(){
        if (tipoLista.equals("Garantias Warrant"))
                return true;
        else
            return false;
    }

    public String realizarTazacion(){
        return "nuevo";
    }

    public String getTipoLista() {
        return tipoLista;
    }

    public void setTipoLista(String tipoLista) {
        this.tipoLista = tipoLista;
    }

    public Garantia getGarantia() {
        return garantia;
    }

    public void setGarantia(Garantia garantia) {
        this.garantia = garantia;
    }

    public GarantiaHipotecaria getGarantiaHipotecaria() {
        return garantiaHipotecaria;
    }

    public void setGarantiaHipotecaria(GarantiaHipotecaria garantiaHipotecaria) {
        this.garantiaHipotecaria = garantiaHipotecaria;
    }

    public GarantiaPignoraticia getGarantiaPignoraticia() {
        return garantiaPignoraticia;
    }

    public void setGarantiaPignoraticia(GarantiaPignoraticia garantiaPignoraticia) {
        this.garantiaPignoraticia = garantiaPignoraticia;
    }

    public GarantiaPrendaria getGarantiaPrendaria() {
        return garantiaPrendaria;
    }

    public void setGarantiaPrendaria(GarantiaPrendaria garantiaPrendaria) {
        this.garantiaPrendaria = garantiaPrendaria;
    }

    public GarantiaWarrant getGarantiaWarrant() {
        return garantiaWarrant;
    }

    public void setGarantiaWarrant(GarantiaWarrant garantiaWarrant) {
        this.garantiaWarrant = garantiaWarrant;
    }


}
